package com.sxj.corejava.code05_反射;

import java.lang.reflect.Modifier;
import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/19日 19:53
 */
public class Test02_常用方法 {

    public static void main(String[] args) {
        Class c = User.class;

        System.out.println("类全名:"+c.getName());
        System.out.println("类名:"+c.getSimpleName());
        System.out.println("实现的接口:"+ Arrays.toString(c.getInterfaces()));
        // 如果没有直接父类,则默认继承的Object
        // 如果有直接父类,返回直接父类
        System.out.println("父类:"+c.getSuperclass());
        System.out.println("包名:"+c.getPackage().getName());
        System.out.println("c是否是接口:"+c.isInterface());
        Class c2 = SomeInterface.class;
        System.out.println("c2是否是接口:"+c2.isInterface());

        // 获取修饰符
        int i = c.getModifiers();
        switch (i){
            case Modifier.PUBLIC:
                System.out.println("修改符为public");
                break;
            case Modifier.PRIVATE:
                System.out.println("修改符为private");
                break;
            case Modifier.PROTECTED:
                System.out.println("修改符为protected");
                break;
        }

        try {
            // 调用Class对应的类中的无参构造方法创建一个对象
            // 此时调用的类中必须存在无参构造方法,且不能是私有方法
            Object obj = c.newInstance();
            if(obj instanceof User){
                User user = (User) obj;
                System.out.println(user);
            }
        } catch (InstantiationException e) {
            System.out.println("实例化异常,该类中没有无参构造方法");
        } catch (IllegalAccessException e) {
            System.out.println("非法访问异常,该类中的无参构造方法属于私有方法,无法被外部访问");
        }
    }

}

interface SomeInterface{

}